iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

昨天談完 web server 在做什麼,今天我們回到 Nginx !

Nginx 的優勢

Nginx 對比 另外一個傳統老將 Apache ,它最常被說贏 Apache 的地方是高效能的部分,能有較高的效能來自於它的架構和請求處理方式上,Nginx 的高效能主要來自於其事件驅動的非阻塞架構,能夠在資源消耗極低的情況下處理大量併發連線。

  • 架構設計

    • Nginx 採用了 事件驅動(Event-Driven)和非阻塞(Non-blocking I/O) 的架構。它可以同時處理大量併發連線,而不需要為每個連線分配一個進程(process)。Nginx 可以再使用較少的進程下,處理更多的請求。
    • 在 nginx 架構設計實際怎麼運行,我也不是很懂,因此我找到了一篇文章,講的蠻詳細,若有興趣的人可以自行閱讀,這裡就不多解釋。
  • 併發處理

    • 能夠處理數十萬個併發連線,因為它的每個進程可以管理許多連接,連線的處理是基於事件循環的,當有新請求進來或數據可讀時,觸發相應的處理,而不是每個請求都佔用一個進程或線程。這種方式在高併發場景下特別高效。

Nginx 的使用

首先我們先安裝 Nginx,我們以 Linux 為例,Mac OS 和 Windows 的安裝,可以網路上找一下,會有很多教學。
Linux/Debian

sudo apt update
sudo apt install nginx

安裝完後,它就會自己啟動服務,我們先來查看一下服務狀態。

sudo systemctl status nginx

https://ithelp.ithome.com.tw/upload/images/20240922/20150927jIhnlcLSho.jpg

接著我們要找到設定檔的位置
這個指令主要是可以測試我們設定檔中的語法是否正確,也可以幫助我們找到他存放的位置。

sudo nginx -t 

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

在 nginx 中有幾個比較重要的檔案
首先

  • 主要設定檔:
    /etc/nginx/nginx.conf:Nginx 的主要設定檔,通常包含全域性設定。如使用者、進程數量、事件配置、HTTP 配置等。該檔案通常也會引入其他子設定檔。

  • 子設定檔:
    一般來說會被主要設定檔所引入

    • /etc/nginx/conf.d/ 主要存放伺服器的設定檔,底下可以設定多的伺服器的個別設定。
    • /etc/nginx/site-enable/ 放置每個網站的設定檔,需手動將設定檔連結到 sites-enabled/
    • /etc/nginx/site-available/ 這個目錄中的設定檔是實際被 Nginx 所加載並生效的網站設定。

接著我們看一下 /etc/nginx/nginx.conf 主要設定檔都能設定些什麼。

{
user www-data; # 指定 Nginx 運行的使用者,這裡是 www-data,指的是用來處理網頁服務的請求。
worker_processes auto; # 自動設定 Nginx 使用的 process 數量,主要會根據 CPU 的配備好壞來做調整。
pid /run/nginx.pid; # Nginx 的 process ID 存放位置。
include /etc/nginx/modules-enabled/*.conf; # 載入位於 /etc/nginx/modules-enabled/ 路徑下的設定檔。

events {
        worker_connections 768; # 每個進程允許的最大連接數。768 是一個常見的預設值,可以根據需求調整。

        # multi_accept on; # 若開啟,進程可以同時接收多個新連接,可以提升高流量下的效能,一般來說設定為關,負載較輕的時候,可以更穩定處理每一個請情。
        
}

http {

        ##
        # Basic Settings
        ##

        sendfile on; # 啟用 sendfile() 的方式來做傳送檔案,這個方法會讓 Nginx 在傳送檔案時更有效率。
        tcp_nopush on; # 與 sendfile 結合,減少網路封包數量,優化傳輸性效能。
        types_hash_max_size 2048; # 設置 MIME 類型 hash 表的大小,以提升 Nginx 的查找效率。
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream; # 當無法自動識別檔案類型時,將其設為二進位流。


        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE 
        #指定支援的 SSL/TLS 協議版本,這裡包含了 TLSv1 到最新的 TLSv1.3,並排除了已不安全的 SSLv3。
        ssl_prefer_server_ciphers on; # 讓伺服器選擇加密套件,而非由客戶端決定,這樣可以提高安全性。


        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log; # 存放 access log 的地方
        error_log /var/log/nginx/error.log; # 存放 error log 的地方

        ##
        # Gzip Settings
        ##

        gzip on; # 啟用 Gzip 壓縮,減少傳輸的資料量,提高網頁載入的速度。

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf; # import 伺服器的設定檔
        include /etc/nginx/sites-enabled/*; # import 各個網站的設定
}

# 郵件代理的功能
#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#
}

如有有修改設定檔記得結束先用 -t 事先查看語法,再 restart service。

sudo nginx -t
sudo systemctl restart nginx 

今天我們把主要設定檔了解了一下,明天我們繼續來看子設定的伺服器設定檔。

Reference


上一篇
Day-9 | Webserver X Nginx
下一篇
Day-11 | 簡單上手 Nginx (2)
系列文
埋藏在後端工程下的地雷與寶藏12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言